假设我们有一个 $p \times q$ 的矩阵 $F$ 要对 $m \times n$ 的矩阵 $X$ 求导,那么根据我们第一篇求导的定义,矩阵 $F$ 中的 $p q$ 个值要对矩阵 $X$ 中的 $m n$ 个值分别求导,那 么求导的结果一共会有 $m n p q$ 个。那么求导的结果如何排列呢? 方法有很多种。 最直观可以想到的求导定义有2种: 第一种是矩阵 $F$ 对矩阵 $X$ 中的每个值 $X_{i j}$ 求导,这样对于矩阵 $X$ 每一个位置 $(\mathrm{i}, \mathrm{j})$ 求导得到的结果是一个矩阵 $\frac{\partial F}{\partial X_{i j}}$ ,可以理解为矩阵 $X$ 的每个位置都被替 换成一个 $p \times q$ 的矩阵,最后我们得到了一个 $m p \times n q$ 的矩阵。 第二种和第一种类似,可以看做矩阵 $F$ 中的每个值 $F_{k l}$ 分别对矩阵 $X$ 求导,这样矩阵 $F$ 每一个位置 $(\mathrm{k}, \mathrm{I})$ 对矩阵 $X$ 求导得到的结果是一个矩阵 $\frac{\partial F_{k l}}{\partial X}$ ,可以 理解为矩阵 $F$ 的每个位置都被替换成一个 $m \times n$ 的矩阵,最后我们得到了一个 $m p \times n q$ 的矩阵。 这两种定义虽然没有什么问题,但是很难用于实际的求导,比如类似我们在机器学习中的矩阵向量求导(三)矩阵向量求导之微分法中很方便使用的微分 法求导。 目前主流的矩阵对矩阵求导定义是对矩阵先做向量化,然后再使用向量对向量的求导。而这里的向量化一般是使用列向量化。也就是说,现在我们的矩 阵对矩阵求导可以表示为: $$ \frac{\partial F}{\partial X}=\frac{\partial \operatorname{vec}(F)}{\partial \operatorname{vec}(X)} $$ 对于矩阵 $F$ ,列向量化后, $\operatorname{vec}(F)$ 的维度是 $p q \times 1$ 的向量,同样的, $\operatorname{vec}(X)$ 的维度是 $m n \times 1$ 的向量。最终求导的结果,这里我们使用分母布局, 得到的是一个 $m n \times p q$ 的矩阵。
按第一节的向量化的矩阵对矩阵求导有什么好处呢? 主要是为了使用类似于前面讲过的微分法求导。回忆之前标量对向量矩阵求导的微分法里,我们 有: $$ d f=\operatorname{tr}\left(\left(\frac{\partial f}{\partial \mathbf{X}}\right)^T d \mathbf{X}\right) $$ 这里矩阵对矩阵求导我们有: $$ \operatorname{vec}(d F)=\frac{\partial \operatorname{vec}(F)^T}{\partial \operatorname{vec}(X)} \operatorname{vec}(d X)=\frac{\partial F^T}{\partial X} \operatorname{vec}(d X) $$ 和之前标量对矩阵的微分法相比,这里的迹函数被矩阵向量化代替了。 矩阵对矩阵求导的微分法,也有一些法则可以直接使用。主要集中在矩阵向量化后的运算法则,以及向量化和克罗内克积之间的关系。关于矩阵向量化 和克罗内克积,具体可以参考张贤达的《矩阵分析与应用》,这里只给出微分法会用到的常见转化性质,相关证明可以参考张的书。 矩阵向量化的主要运算法则有:
克罗内克积的主要运算法则有:
下面我们给出一个使用微分法求解矩阵对矩阵求导的实例。 首先我们来看看: $\frac{\partial A X B}{\partial X}$ ,假设 $\mathrm{A}, \mathrm{X}, \mathrm{B}$ 都是矩阵, $\mathrm{X}$ 是 $m \times n$ 的矩阵。 首先求 $d F ,$ 和之前第三篇的微分法类似,我们有: $$ d F=A d X B $$ 然后我们两边列向量化(之前的微分法是套上迹函数), 得到: $$ \operatorname{vec}(d F)=\operatorname{vec}(A d X B)=\left(B^T \bigotimes A\right) \operatorname{vec}(d X) $$ 其中,第二个式子使用了上面矩阵向量化的性质2。 这样,我们就得到了求导结果为: $$ \frac{\partial A X B}{\partial X}=\left(B^T \bigotimes A\right)^T=B \bigotimes A^T $$
利用上面的结果我们也可以得到: $$ \begin{aligned} &\frac{\partial A X}{\partial X}=I_n \bigotimes A^T \\ &\frac{\partial X B}{\partial X}=B \bigotimes I_m \end{aligned} $$ 来个复杂一些的: $\frac{\partial \operatorname{Aexp}(B X C) D}{\partial X}$ 首先求微分得到: $$ d F=A[\operatorname{dexp}(B X C)] D=A[\exp (B X C) \odot(B d X C)] D $$ 两边矩阵向量化,我们有: $$ \begin{gathered} \operatorname{vec}(d F)=\left(D^T \bigotimes A\right) \operatorname{vec}[\exp (B X C) \odot(B d X C)]=\left(D^T \bigotimes A\right) \operatorname{diag}(\exp (B X C)) \operatorname{vec}(B d X C) \\ =\left(D^T \bigotimes A\right) \operatorname{diag}(\exp (B X C))\left(C^T \bigotimes B\right) \operatorname{vec}(d X) \end{gathered} $$ 其中第一个等式使用了矩阵向量化性质2,第二个等式使用了矩阵向量化性质 4 ,第三个等式使用了矩阵向量化性质 2 。 这样我们最终得到: $$ \frac{\partial A \exp (B X C) D}{\partial X}=\left[\left(D^T \bigotimes A\right) \operatorname{diag}(\exp (B X C))\left(C^T \bigotimes B\right)\right]^T=\left(C \bigotimes B^T\right) \operatorname{diag}(\exp (B X C))\left(D \bigotimes A^T\right) $$
由于矩阵对矩阵求导的结果包含克罗内克积,因此和之前我们讲到的其他类型的矩阵求导很不同,在机器学习算法优化中中,我们一般不在推导的时候使用矩阵对矩阵的求导,除非只是做定性的分析。
转载自: